/**
 * 与服务器的通信
 * 消息转发到下层
 */

// 各路状态码
// 为了降低单层代码的量，设置type和sub_type
// 通信层只负责把对应的type发到下面
// 由下面的子业务处理sub_type
const REQ_TYPE = {
    'LOGIN'             : 'login',

    'MSG_TEXT'          : 'msg_text',
    'MSG_TEXT_SEND'     : 'msg_text_send',

    'MSG_FILE'          : 'msg_file',
    'MSG_FILE_SEND'     : 'msg_file_send',
}
const RES_TYPE = {
    'LOGIN_RESULT'      : 'login_res',

    'MSG_TEXT'          : 'msg_text',
    'MSG_TEXT_COME'     : 'msg_text_come',

    'MSG_FILE'          : 'msg_file',
    'MSG_FILE_COME'     : 'msg_file_come',
}
// 简化向服务器发送信息的函数
function send(data) {ws.send(JSON.stringify(data));}

// WebSocket连接
var ws = new WebSocket("ws://"+location.hostname+":2346");
ws.onopen = function (evt) {
    // 直接登录，让服务器记忆
    // 用全站的token登录
    send({
        'type'  : REQ_TYPE.LOGIN,
        'token' : token,
    });
}
ws.onmessage = function(evt) {
    data = JSON.parse(evt.data);
    switch(data.type) {
        case RES_TYPE.LOGIN_RESULT://登录
            if(data.code != 0) mdui.alert(data.msg);
            break;
        case RES_TYPE.MSG_TEXT:// 消息_文本
            onMsgText(data);
            break;
        case RES_TYPE.MSG_FILE:
            onMsgFile(data);
            break;
    }
}

function messageSend() {
    msg = $('#msg').val();
    if(msg == '') {
        return;
    }
    //msg = msg.replace('\n','<br>');msg = msg.replace('<','&lt;');msg = msg.replace('>','&gt;');
    send({
        'type'      : REQ_TYPE.MSG_TEXT,
        'sub_type'  : REQ_TYPE.MSG_TEXT_SEND,
        'token'     : token,
        'msg'       : msg,
    });
    document.getElementById('msg').value = '';
}
function fileSend(fileid,filename) {
    send({
        'type'      : REQ_TYPE.MSG_FILE,
        'sub_type'  : REQ_TYPE.MSG_FILE_SEND,
        'token'     : token,
        'fileid'    : fileid,
        'filename'  : filename,
    });
}

// 文本信息到达
function onMsgText(data) {
    switch(data.sub_type) {
        case RES_TYPE.MSG_TEXT_COME:
            if(data.uid == uid) addChatShowMsg(data.username,data.msg,'right');
            else addChatShowMsg(data.username,data.msg,'left');
            break;
    }
}

// 文件信息到达
function onMsgFile(data) {
    switch(data.sub_type){
        case RES_TYPE.MSG_FILE_COME:
            if(data.uid == uid) break;
            else addFileShowMsg(data.filename,'left',data.fileid,data.username);
            break;
    }
}